package bc.sistema;

import bc.janelas.PLogin;
import bc.janelas.Principal;
import bc.sistema.biblioteca.Ficha;
import bc.sistema.item.Item;
import bc.sistema.usuario.Usuario;
import bc.sistema.usuario.professor.Professor;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.util.ArrayList;
import java.util.List;

/**
 * Classe Sistema.
 *
 * @author Felipe Miranda Medeiros
 * @version 1.0
 */
public class Sistema {
    
    private Ficha fichaAtiva;
    private List<Ficha> fichas = new ArrayList<>();
    
    private static Sistema instancia;
    
    private static Principal janelaPrincipal;
    private static PLogin panelLogin;
    
    public static void main(String args[]) {
        Sistema sistema = Sistema.getInstancia();
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Windows".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                janelaPrincipal = new Principal();
                janelaPrincipal.setVisible(true);
                janelaPrincipal.setLayout(new FlowLayout());
                panelLogin = new PLogin();
                panelLogin.setLocation(80,80);
                janelaPrincipal.add(panelLogin,BorderLayout.CENTER);
                //janelaPrincipal.setContentPane(BorderLayout.CENTER);
                panelLogin.setVisible(true);
            }
        });
    }
    
    private Sistema(){
    }
    
    public static Sistema getInstancia(){
        if (instancia == null)
            instancia = new Sistema();
        return instancia;
    }
    
    public boolean logar(String username, String senha){
        Ficha fichaTmp = procurarFichaDeUsuario(username, senha);
        if (fichaTmp == null){
            fichaAtiva = fichaTmp;
            return false;
        }
        return true;
    }
    
    public void deslogar(){
        fichaAtiva = null;
    }
  
    public void novaFicha(Usuario novoUsuario) {
        if (novoUsuario == null) {
            throw new NullPointerException("Usuário null");
        }
        fichas.add(new Ficha(novoUsuario));
    }

    public void removerFicha(Usuario usuario) {
        for (Ficha ficha : fichas) {
            if (((Professor) usuario).equals(((Professor) usuario))) {
                fichas.remove(usuario);
            }
        }
    }

    private Ficha procurarFichaDeUsuario(String username, String senha) {
        for (Ficha ficha : fichas) {
            if (ficha.getUsuario().validarLogin(username, senha)) {
                return ficha;
            }
        }
        return null;
    }
    
    private void addItem(Item item){
        fichaAtiva.addItem(item);
    }
    
    private void removerItem(Item item){
        fichaAtiva.removerItem(item);
    }
}
